package main

/**
依赖唯一的工厂对象，如果我们需要实例化一个产品，那么就要向工厂对象中传入一个参数获取对应对象，如果要增加一种产品，就要在工厂中修改创建产品的函数，耦合度过高
*/

import "fmt"

type API interface {
	Say(name string)
}
type HiAPI struct {
}
type HelloAPI struct {
}

func (hi *HiAPI) Say(name string) {
	fmt.Println(fmt.Sprintf("Hi,%s", name))
}

func (hello *HelloAPI) Say(name string) {
	fmt.Println(fmt.Sprintf("Hello,%s", name))
}

func NewApi(apiType int) API {
	if apiType == 1 {
		return &HiAPI{}
	} else {
		return &HelloAPI{}
	}
}

func main() {
	api := NewApi(1)
	api.Say("111")
	api2 := NewApi(2)
	api2.Say("222")
}
